package com.bigdata.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo2_Tran1 {

  def main(args: Array[String]): Unit = {
    // 创建spark配置对象
    val conf: SparkConf = new SparkConf()
      .setMaster("local[1]")
      .setAppName("WordCount") // 设置应用名称

    // 需要一个SparkContext对象
    val sc = new SparkContext(conf)
    // 设置日志的打印级别
    sc.setLogLevel("error")


    val linesRDD: RDD[String] = sc.textFile("data/words.txt", 2)

    // filter过滤，处理每一行数据，返回true这一行数据会保留
    //    val filterRDD: RDD[String] = linesRDD.filter(line => {
    //      line.split(",").length == 3
    //    })
    //
    //    filterRDD.foreach(println)

    // map, 只保留第一个单词
    //    val wordRDD: RDD[String] = linesRDD.map(line => {
    //      line.split(",")(0)
    //    })
    //
    //    wordRDD.foreach(println)

    val wordRDD: RDD[String] = linesRDD.flatMap(line => {
      line.split(",")
    })
    // wordRDD.foreach(println)
    /**
     * ● sample
     * withReplacement = true -> 抽到的数据放回
     * fraction = 0.1 抽取的比例，大概的比例
     * seed 抽取的种子，种子相同，抽取的是同一批数据
     * 随机抽样算子，根据传进去的小数按比例进行又放回或者无放回的抽样。
     */
    //    val arr: Array[Int] = Array(1, 2,3,4, 5, 6, 7, 8, 9,10)
    //    val numRDD: RDD[Int] = sc.parallelize(arr)
    //    val result: RDD[Int] = numRDD.sample(true, 0.5, 200)
    //    result.foreach(println)

    //    sortByKey / sortBy 作用在K, V 格式的RDD 上
    val pairRDD: RDD[(String, Int)] = wordRDD.map((_, 1))
    // pairRDD.foreach(println)

    // sortByKey算子会不会走shuffle
    val result: RDD[(String, Int)] = pairRDD.sortByKey()
    result.foreach(println)



   Thread.sleep(Integer.MAX_VALUE)

  }

}
